#pragma once


class Gate;
class PhysicalObject;
class ActionObject;

class IRaceController
{
public:
   virtual ~IRaceController() {}

   virtual PhysicalObject* getUserControllerPhysicalObject() = 0;

   virtual ActionObject* getUserControllerActionObject() = 0;

   virtual Gate& getGate(UINT no) = 0;

   virtual UINT getNumGatesToScore() const = 0;

   virtual void startRace() = 0;

   virtual void victory(UINT playerIdx) = 0;

   virtual bool hasPlayerWon() const = 0;

   virtual void raceOver() = 0;
};